<?php

namespace app\index\controller;

use app\index\controller\Base;
use think\Request;
use app\index\Model\User as UserModel;
use think\facade\Session;

class User extends Base
{
    protected $config = [
        // 验证码字体大小
        'fontSize' => 30,
        // 验证码位数
        'length' => 4,
        // 关闭验证码杂点
        'useNoise' => false,
    ];

    //渲染登录界面
    public function login()
    {
        $this->alreadyLogin();//防止用户重复登录
        return $this->view->fetch('login');
    }

    //1.验证登录,用主控制器类的validate方法验证
    // $this->validate($data, $validate, $message = []);
    //2.验证的时候要用到请求类对象,需要导入Reques类,因为要验证的数据为请求到的
    //当前使用依赖注入的方式
    public function checkLogin(Request $request)
    {
        //初始化返回参数
        $status = 0;
        $result = '';
        $data = $request->param();

        //创建验证规则
        $rule = [
            'name|用户名' => 'require',//用户名必填
            'password|密码' => 'require',//密码必填
            'verify|验证码' => 'require|captcha',//验证码
        ];

        //自定义验证错误提示信息
        $msg = [
            'name' => ['require' => '用户名不能为空,请检查'],
            'password' => ['require' => '密码不能为空,请检查'],
            'verify' => [
                'require' => '验证码不能为空,请检查',
                'captcha' => '验证码错误'
            ],
        ];

        //进行验证
        //$result只会返回两种值,true与字符串
        $result = $this->validate($data, $rule, $msg);


        //如果验证通过则执行
        if ($result === true) {
            //构建查询条件
            $map = [
                'name' => $data['name'],
                'password' => md5($data['password'])
            ];
            //查询用户信息
            $user = UserModel::get($map);
            if ($user == null) {
                $result = "没有找到该用户";
            } else {
                $status = 1;
                $result = "验证通过,点击[确定]进入";
                //设置用户登录信息到session
                Session::set('user_id', $user->id);//用户id
                Session::set('user_info', $user->getData());//获取用户所有信息
            }
        }

        return ['status' => $status, 'result' => $result, 'data' => $data];

    }

    //退出登录
    public function logout()
    {
        //删除session
        Session::delete('user_id');
        Session::delete('user_info');
        $this->success("注销登录,正在返回", 'user/login');
    }

    //管理员列表
    public function adminList()
    {
        $this->view->assign('title', '管理员列表');
        $this->view->assign('keywords', '管理员列表');
        $this->view->assign('desc', '管理员列表');

        //调用模型统计user表数据
        $this->view->count = UserModel::count();

        //判断当前是不是admin用户
        //先通过session获取到登录用户名
        $userName = Session::get('user_info.name');
        if ($userName == 'admin') {//模型查的数据在询和数据库查询方法的区别主要在于，模型中的查询获取的时候会经过获取器的处理，以及更加对象化的获取方式。

            $list = UserModel::all();//admin用户可以查看所有记录,数据要经过模型获取器处理
        } else {
            //为了公用列表模板,使用了all,其实这里用get()符合逻辑,但有时也要变通
            //非admin用户只能看自己的信息,数据要经过模型获取器处理
            $list = UserModel::all(['name' => $userName]);
        }

        $this->view->assign('list', $list);
        return $this->view->fetch('admin_list');
    }

    //添加管理员
    public function addAdmin()
    {

    }

    //管理员状态变动
    public function setStatus(Request $request)
    {
        $user_id = $request->param('id');
        $result = UserModel::get($user_id);
        if($result->getData('status') == 1){
            UserModel::update(['status'=>0],['id'=>$user_id]);
        }else{
            UserModel::update(['status'=>1],['id'=>$user_id]);
        }
    }

    //编辑管理员信息
    public function adminEdit(){

    }

    //删除管理员信息
    public function deleteUser(Request $request){
        $user_id = $request->param('id');
        if($user_id == 1){
            return $this->error('不可以删除超级管理员');
        }
        return(UserModel::get($user_id));
    }
}
